import scrapy
# 引入 items.py
from scrapy_dangdang.items import ScrapyDangdangItem




class DangSpider(scrapy.Spider):
    # 爬取当当网数据
    name = 'dang'
    # 若是多页下载，allowed_domains必须调整范围，一般情况写域名即可；
    allowed_domains = ['category.dangdang.com']
    start_urls = ['https://category.dangdang.com/cp01.21.01.00.00.00.html']

    #分页
    base_url = 'https://category.dangdang.com/pg'
    # page 从1开始
    page = 1

    def parse(self, response):
        print('爬取当当网数据...')
        li_list = response.xpath('//ul[@id="component_59"]/li')
        for li in li_list:
            img = li.xpath('.//img/@data-original').extract_first()
            if img is None:
                print('图片元素为空！！从src中获取。。。')
                img = li.xpath('.//img/@src').extract_first()

            # 获取标签内容
            name = li.xpath('.//img/@alt').extract_first()
            price = li.xpath('.//span[@class="search_now_price"]/text()').extract_first()
            if price == '¥':
                print('price 没有获取到金额。。。原因：会发现网页源码的标签与浏览器解析的不太一样，此为正常现象！！', price)
                price = li.xpath('.//span[@class="search_now_price"]/i/text()').extract_first()

            print(img, name, price)

            # 使用items
            book = ScrapyDangdangItem(img=img, name=name, price=price)

            # yield 就是 return 返回一个值，并且记住这个返回的位置，下次迭代从这个位置后下一行开始
            # 将book 交给管道 pipelines
            yield book

        # 分页的请求实例：
        # https://category.dangdang.com/cp01.21.01.00.00.00.html
        # https://category.dangdang.com/pg2-cp01.21.01.00.00.00.html
        # https://category.dangdang.com/pg3-cp01.21.01.00.00.00.html
        if self.page < 5:
            # page + 1
            self.page = self.page + 1
            # 拼接分页url
            url = self.base_url + str(self.page) + '-cp01.21.01.00.00.00.html'
            #调用parse方法,注意不能带括号(), url=请求地址，callback=你要执行那个方法；
            yield scrapy.Request(url=url, callback=self.parse)




